Codigo en Java para escribir o leer de archivos (datos binarios)
NOTA: la excepcion IOException tiene que se manejada siempre, ya sea con throws o con un bloque try-catch
En el caso de usar solo FileOutputStream solo tenemos la opcion de escribir bytes de manera individual
ObjectOutputStream nos permite utilizar varias funciones para hacer mas facil la escritura de datos binarios:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class JavaFilesBin {
public static void main(String[] args) throws IOException {
int numero = 45645456;
FileOutputStream dataFile = new FileOutputStream("archivo.dat");
ObjectOutputStream data = new ObjectOutputStream(dataFile);
data.writeObject(numero);
data.close();
}
}
NOTA: La clase del objeto a serializar deber de implementar la interfaz Serializable.
Con este método podemos escribir los tipos de datos primitivos tal cual en un archivo binario:
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class App {
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("archivo.dat");
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
dataOutputStream.writeInt(1);
dataOutputStream.writeInt(2);
dataOutputStream.writeInt(3);
dataOutputStream.writeInt(255);
dataOutputStream.close();
}
}
En un editor exadecimal el archivo.dat se vería tal que así:
Cuando utilizamos ObjectInputStream tenemos que manejar la excepcion ClassNotFoundException a mayores
ObjectInputStream nos permite utilizar varias funciones para hacer mas facil la lectura de datos binarios:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class JavaFilesBin {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream readFile = new FileInputStream("archivo.dat");
ObjectInputStream readData = new ObjectInputStream(readFile);
System.out.println(readData.readObject());
readData.close(); //Tenemos que cerrar los dos objetos
readFile.close();
}
}
En este caso a pesar de utilizar readObject lo estamos haciendo con un int, por lo tanto java puede manejarlo sin mas
en el caso de hacerlo con un objeto de verdad tendriamos que realizar una conversion explicita del objeto
La conversion explicita de objetos es un poco rara, en este caso seria (con un objeto persona):
((persona)readData.readObject())
a partir de aqui podemos usar los atributos de persona
((persona)readData.readObject()).nombre
La siguiente forma por ejemplo seria incorrecta:
(persona)(readData.readObject()).nombre
java | Archivos